代码改变世界

面试题13:删除单链表中的重复元素

2016-03-31 22:14  Keiven_LY  阅读(822)  评论(0编辑  收藏  举报

算法思路:

设立三个工作指针p,q,r,p用于遍历链表,q用于遍历p后面的链表,r保存需要删掉的结点。P遍历整个链表,p每到一个结点,q就从这个结点往后遍历,并与p比较,相同的话就删掉此结点。

功能函数:

/*     删除链表中的重复结点    */
Node *deleteReprodecedNode(Node *head)
{
    Node *p, *q, *r;
    p = head->next;
    while(p)  //p用于遍历链表
    {
        q = p;
        while(q->next)   //q用于遍历p后面的链表
        {
            if(q->next->data == p->data)
            {
                r = q->next;   //r保存需要删掉的结点
                q->next = r->next;  //需要删掉的结点的前后结点相连
                free(r);
            }
            else
                q = q->next;
        }
    }
    return head;
}